home *** CD-ROM | disk | FTP | other *** search
-
- // Copyright (C) 2002 by Luigi Pino. All Rights Reserved.
-
- /***************************************************************************/
-
- #include "../library/neurosis.h"
- #include "draw.h"
- #include "file_io.h"
- #include "hiscore.h"
- #include "initialize.h"
- #include "main.h"
- #include "menu_misc.h"
- #include "paddle.h"
- #include "sphere.h"
- #include "update.h"
-
- /***************************************************************************/
-
- extern Object3_Class paddle[];
- extern Paddle_Struct paddle_object[];
- extern Sphere_Control_Struct sphere_object[];
- extern Sub_Menu_Class menu_control;
- extern Sub_Menu_Class menu_options;
- extern Timing_Class timing;
- extern Values_Struct values;
-
- /***************************************************************************/
-
- void Initialize_Paddle_Object()
-
- {
- int x1;
-
- paddle_object[Up].movement.direction = 90.0f;
- paddle_object[Up].movement.current.x = 0.0f;
- paddle_object[Up].movement.current.y = 130.0f;
- paddle_object[Up].movement.current.z = 0.0f;
- paddle_object[Up].pts[0].x = -20.0f;
- paddle_object[Up].pts[0].y = 10.0f;
- paddle_object[Up].pts[1].x = 20.0f;
- paddle_object[Up].pts[1].y = 10.0f;
- paddle_object[Up].pts[2].x = 20.0f;
- paddle_object[Up].pts[2].y = -10.0f;
- paddle_object[Up].pts[3].x = -20.0f;
- paddle_object[Up].pts[3].y = -10.0f;
- paddle_object[Up].pts[4].x = paddle_object[Up].pts[0].x;
- paddle_object[Up].pts[4].y = paddle_object[Up].pts[0].y;
-
- paddle_object[Down].movement.direction = 90.0f;
- paddle_object[Down].movement.current.x = 0.0f;
- paddle_object[Down].movement.current.y = -130.0f;
- paddle_object[Down].movement.current.z = 0.0f;
- paddle_object[Down].pts[0].x = -20.0f;
- paddle_object[Down].pts[0].y = 10.0f;
- paddle_object[Down].pts[1].x = 20.0f;
- paddle_object[Down].pts[1].y = 10.0f;
- paddle_object[Down].pts[2].x = 20.0f;
- paddle_object[Down].pts[2].y = -10.0f;
- paddle_object[Down].pts[3].x = -20.0f;
- paddle_object[Down].pts[3].y = -10.0f;
- paddle_object[Down].pts[4].x = paddle_object[Down].pts[0].x;
- paddle_object[Down].pts[4].y = paddle_object[Down].pts[0].y;
-
- paddle_object[Left].movement.direction = 90.0f;
- paddle_object[Left].movement.current.x = -130.0f;
- paddle_object[Left].movement.current.y = 0.0f;
- paddle_object[Left].movement.current.z = 0.0f;
- paddle_object[Left].pts[0].x = 10.0f;
- paddle_object[Left].pts[0].y = -20.0f;
- paddle_object[Left].pts[1].x = 10.0f;
- paddle_object[Left].pts[1].y = 20.0f;
- paddle_object[Left].pts[2].x = -10.0f;
- paddle_object[Left].pts[2].y = 20.0f;
- paddle_object[Left].pts[3].x = -10.0f;
- paddle_object[Left].pts[3].y = -20.0f;
- paddle_object[Left].pts[4].x = paddle_object[Left].pts[0].y;
- paddle_object[Left].pts[4].y = paddle_object[Left].pts[0].x;
-
- paddle_object[Right].movement.direction = 90.0f;
- paddle_object[Right].movement.current.x = 130.0f;
- paddle_object[Right].movement.current.y = 0.0f;
- paddle_object[Right].movement.current.z = 0.0f;
- paddle_object[Right].pts[0].x = 10.0f;
- paddle_object[Right].pts[0].y = -20.0f;
- paddle_object[Right].pts[1].x = 10.0f;
- paddle_object[Right].pts[1].y = 20.0f;
- paddle_object[Right].pts[2].x = -10.0f;
- paddle_object[Right].pts[2].y = 20.0f;
- paddle_object[Right].pts[3].x = -10.0f;
- paddle_object[Right].pts[3].y = -20.0f;
- paddle_object[Right].pts[4].x = paddle_object[Right].pts[0].y;
- paddle_object[Right].pts[4].y = paddle_object[Right].pts[0].x;
-
- // Initialize paddle model and control
- for (x1=Up;x1<=Right;x1=x1+1)
- {
- paddle[x1].Load_Model("Data/paddle.dat", t_paddle);
- paddle[x1].Move(&paddle_object[x1].movement.current);
-
- if ((x1 == Left) || (x1 == Right))
- paddle[x1].Rotate_z(90.0f);
-
- paddle_object[x1].input.user = menu_control.Get_Current_Choice(x1);
-
- if (paddle_object[x1].input.user == Keyboard_1)
- paddle_object[x1].input.keyboard.Set_Keys(-1, -1, -1, -1, -1, -1, -1, -1, -1, VK_UP, VK_DOWN, VK_LEFT, VK_RIGHT);
- else if (paddle_object[x1].input.user == Keyboard_2)
- paddle_object[x1].input.keyboard.Set_Keys(-1, -1, -1, -1, -1, -1, -1, -1, -1, 'W', 'S', 'A', 'D');
- }
-
- if (values.game_type == High_Score)
- {
- paddle_object[Up].input.user = No_User;
- paddle_object[Left].input.user = No_User;
- paddle_object[Right].input.user = No_User;
- paddle_object[Down].input.user = menu_control.Get_Current_Choice(Compete);
-
- if (paddle_object[Down].input.user == Keyboard_1)
- paddle_object[Down].input.keyboard.Set_Keys(-1, -1, -1, -1, -1, -1, -1, -1, -1, VK_UP, VK_DOWN, VK_LEFT, VK_RIGHT);
- else if (paddle_object[Down].input.user == Keyboard_2)
- paddle_object[Down].input.keyboard.Set_Keys(-1, -1, -1, -1, -1, -1, -1, -1, -1, 'W', 'S', 'A', 'D');
- }
-
- // Initialize paddle values
- for (x1=Up;x1<=Right;x1=x1+1)
- {
- if (values.game_type == Countdown)
- paddle_object[x1].score = 300.0f + (menu_options.Get_Current_Choice(3) * 300.0f);
- else
- paddle_object[x1].score = 0.0f;
-
- if (paddle_object[x1].input.user == No_User)
- {
- paddle_object[x1].score = 0.0f;
- paddle_object[x1].game_over = true;
- }
- else
- paddle_object[x1].game_over = false;
-
- paddle_object[x1].time_lapse = 0.0f;
- paddle_object[x1].time_lapse_score = 0.0f;
- }
- }
-
- /***************************************************************************/
-
- void Paddle_AI(int current_paddle)
-
- {
- float closest_distance;
- float distance;
- float3 temp_from;
- float3 temp_to;
- int closest_sphere = 0;
- int paddle_point_1;
- int paddle_point_2;
- int wall_point_1;
- int wall_point_2;
-
- temp_from.x = paddle_object[current_paddle].movement.current.x;
- temp_from.y = paddle_object[current_paddle].movement.current.y;
- temp_from.z = 0.0f;
-
- temp_to.x = sphere_object[0].movement.current.x;
- temp_to.y = sphere_object[0].movement.current.y;
- temp_to.z = 0.0f;
-
- closest_distance = Get_Distance(&temp_from, &temp_to);
- closest_sphere = 0;
-
- for (int x1=1;x1<values.sphere_number;x1=x1+1)
- {
- temp_to.x = sphere_object[x1].movement.current.x;
- temp_to.y = sphere_object[x1].movement.current.y;
- temp_to.z = 0.0f;
-
- distance = Get_Distance(&temp_from, &temp_to);
-
- if (distance < closest_distance)
- {
- closest_distance = distance;
- closest_sphere = x1;
- }
- }
-
- if (current_paddle == Up)
- {
- paddle_point_1 = 2;
- paddle_point_2 = 3;
- wall_point_1 = 37;
- wall_point_2 = 34;
- }
- else if (current_paddle == Down)
- {
- paddle_point_1 = 0;
- paddle_point_2 = 1;
- wall_point_1 = 13;
- wall_point_2 = 10;
- }
- else if (current_paddle == Left)
- {
- paddle_point_1 = 1;
- paddle_point_2 = 0;
- wall_point_1 = 25;
- wall_point_2 = 22;
- }
- else
- {
- paddle_point_1 = 3;
- paddle_point_2 = 2;
- wall_point_1 = 49;
- wall_point_2 = 46;
- }
-
- paddle_object[current_paddle].input.direction[Left].x = 0.0f;
- paddle_object[current_paddle].input.direction[Right].x = 0.0f;
-
- if ((current_paddle == Up) || (current_paddle == Down))
- {
- if (sphere_object[closest_sphere].movement.current.x < (paddle_object[current_paddle].movement.current.x + paddle_object[current_paddle].pts[paddle_point_1].x))
- paddle_object[current_paddle].input.direction[Left].x = 1.0f;
- else if (sphere_object[closest_sphere].movement.current.x > (paddle_object[current_paddle].movement.current.x + paddle_object[current_paddle].pts[paddle_point_2].x))
- paddle_object[current_paddle].input.direction[Right].x = 1.0f;
- }
- else
- {
- if (sphere_object[closest_sphere].movement.current.y < (paddle_object[current_paddle].movement.current.y + paddle_object[current_paddle].pts[paddle_point_1].y))
- paddle_object[current_paddle].input.direction[Left].x = 1.0f;
- else if (sphere_object[closest_sphere].movement.current.y > (paddle_object[current_paddle].movement.current.y + paddle_object[current_paddle].pts[paddle_point_2].y))
- paddle_object[current_paddle].input.direction[Right].x = 1.0f;
- }
-
- Paddle_Movement(current_paddle);
- }
-
- /***************************************************************************/
-
- void Paddle_Movement(int current_paddle)
-
- {
- // Save old position
- paddle_object[current_paddle].movement.previous.x = paddle_object[current_paddle].movement.current.x;
- paddle_object[current_paddle].movement.previous.y = paddle_object[current_paddle].movement.current.y;
-
- if (paddle_object[current_paddle].input.direction[Left].x > 0.0f)
- {
- paddle_object[current_paddle].input.direction[Left].x = 0.0f;
- paddle_object[current_paddle].movement.direction = paddle_object[current_paddle].movement.direction - (450.0f * timing.Get_Scale());
-
- if (paddle_object[current_paddle].movement.direction < 0.0f)
- paddle_object[current_paddle].movement.direction = 0.0f;
- }
- else if (paddle_object[current_paddle].input.direction[Right].x > 0.0f)
- {
- paddle_object[current_paddle].input.direction[Right].x = 0.0f;
- paddle_object[current_paddle].movement.direction = paddle_object[current_paddle].movement.direction + (450.0f * timing.Get_Scale());
-
- if (paddle_object[current_paddle].movement.direction > 180.0f)
- paddle_object[current_paddle].movement.direction = 180.0f;
- }
- else
- {
- if (paddle_object[current_paddle].movement.direction > 90.0f)
- {
- paddle_object[current_paddle].movement.direction = paddle_object[current_paddle].movement.direction - (450.0f * timing.Get_Scale());
-
- if (paddle_object[current_paddle].movement.direction < 90.0f)
- paddle_object[current_paddle].movement.direction = 90.0f;
- }
- else if (paddle_object[current_paddle].movement.direction < 90.0f)
- {
- paddle_object[current_paddle].movement.direction = paddle_object[current_paddle].movement.direction + (450.0f * timing.Get_Scale());
-
- if (paddle_object[current_paddle].movement.direction > 90.0f)
- paddle_object[current_paddle].movement.direction = 90.0f;
- }
- }
-
- if ((current_paddle == Up) || (current_paddle == Down))
- {
- paddle_object[current_paddle].movement.current.x = paddle_object[current_paddle].movement.current.x - (Cos_F(paddle_object[current_paddle].movement.direction) * (values.paddle_speed * timing.Get_Scale()));
-
- if (paddle_object[current_paddle].movement.current.x < -60.0f)
- {
- paddle_object[current_paddle].movement.current.x = -60.0f;
- paddle_object[current_paddle].movement.direction = 90.0f;
- }
- else if (paddle_object[current_paddle].movement.current.x > 60.0f)
- {
- paddle_object[current_paddle].movement.current.x = 60.0f;
- paddle_object[current_paddle].movement.direction = 90.0f;
- }
- }
- else
- {
- paddle_object[current_paddle].movement.current.y = paddle_object[current_paddle].movement.current.y - (Cos_F(paddle_object[current_paddle].movement.direction) * (values.paddle_speed * timing.Get_Scale()));
-
- if (paddle_object[current_paddle].movement.current.y < -60.0f)
- {
- paddle_object[current_paddle].movement.current.y = -60.0f;
- paddle_object[current_paddle].movement.direction = 90.0f;
- }
- else if (paddle_object[current_paddle].movement.current.y > 60.0f)
- {
- paddle_object[current_paddle].movement.current.y = 60.0f;
- paddle_object[current_paddle].movement.direction = 90.0f;
- }
- }
-
- // Calculate increment of paddle position
- paddle_object[current_paddle].movement.increment.x = paddle_object[current_paddle].movement.current.x - paddle_object[current_paddle].movement.previous.x;
- paddle_object[current_paddle].movement.increment.y = paddle_object[current_paddle].movement.current.y - paddle_object[current_paddle].movement.previous.y;
- paddle_object[current_paddle].movement.increment.z = 0.0f;
-
- paddle[current_paddle].Move(&paddle_object[current_paddle].movement.increment);
- }
-
- /***************************************************************************/
-
- void Paddle_User_Input(int current_paddle)
-
- {
- if ((paddle_object[current_paddle].input.user >= Joystick_1) && (paddle_object[current_paddle].input.user <= Joystick_4))
- {
- joyGetPosEx(paddle_object[current_paddle].input.user - Joystick_1, &paddle_object[current_paddle].input.joystick.info);
- paddle_object[current_paddle].input.Get_Info();
- }
- else if ((paddle_object[current_paddle].input.user == Keyboard_1) || (paddle_object[current_paddle].input.user == Keyboard_2))
- paddle_object[current_paddle].input.Get_Info();
-
- if ((current_paddle == Left) || (current_paddle == Right))
- {
- paddle_object[current_paddle].input.direction[Left].x = paddle_object[current_paddle].input.direction[Down].x;
- paddle_object[current_paddle].input.direction[Right].x = paddle_object[current_paddle].input.direction[Up].x;
- paddle_object[current_paddle].input.direction[Down].x = 0.0f;
- paddle_object[current_paddle].input.direction[Up].x = 0.0f;
- }
-
- Paddle_Movement(current_paddle);
- }
-
- /***************************************************************************/